home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
PROBLEMS
/
ASM
/
DIVASM
< prev
next >
Wrap
Internet Message Format
|
1992-03-08
|
1KB
Path: newcastle.ac.uk!uknet!ukc!mcsun!fuug!news.funet.fi!sunic!dkuug!diku!torbenm
>From: torbenm@diku.dk (Torben AEgidius Mogensen)
Newsgroups: comp.sys.acorn
Subject: Re: fast divide
Message-ID: <1991Oct31.153421.22641@odin.diku.dk>
Date: 31 Oct 91 15:34:21 GMT
References: <3351@m1.cs.man.ac.uk>
Sender: torbenm@freke.diku.dk
Organization: Department of Computer Science, U of Copenhagen
Lines: 41
rogersh%t3b@uk.ac.man.cs (Huw J. Rogers) writes:
> Can people post/email the fastest 32 bit divide/modulus
>routines they have for the ARM? ObjAsm stuff is preferred, but
>BASIC assembler (ugh!) will do... ;-)
Here is one I cooked up. It is from memory, so there might be slight
errors. The comparisons before the first SUB ensure that no overflow
happens on the ASL. Worst case time is 5 cycles per bit.
Arguments in p,q.
on exit, r = p div q, p = p mod q
.div
MOV r,#0
CMP p,q
BLT nodiv
CMP p,q ASL #1
BLT div0
CMP p,q ASL #2
BLT div1
... \ repeat for 3..30
CMP p,q ASL #31
SUBGE p,q ASL #31
ADDGE r,#2^31
CMP p,q ASL #30
.div30
SUBGE p,q ASL #30
ADDGE r,#2^30
CMP p,q ASL #29
.div29
... \ repeat for 29..1
.div0
SUBGE p,q ASL #0 \ equiv. to SUBGE p,q
ADDGE r,#2^0
.nodiv
MOV PC,Link